<?php
/**
 * Created by PhpStorm.
 * User: lcw-home
 * Date: 2015/11/14
 * Time: 15:25
 */

namespace Common;

use Common\Lib\Response;
use Think\Controller;
use Common\Lib\Auth;
class AdminController extends Controller
{
    /**
     * 后台控制器初始化
     */
    protected function _initialize(){

        // 获取当前用户ID
        define('IS_LOGIN',is_login());
        // 是否是超级管理员
        define('IS_ROOT', is_administrator());
        // 检测访问权限
        $access =  $this->accessControl();
        if ( $access === false ) {
            $this->error('403:禁止访问');
        }elseif( $access === null ){
            if(!IS_LOGIN && !('System'==MODULE_NAME && 'Index'==CONTROLLER_NAME && 'G_login'==ACTION_NAME)){
                if(IS_AJAX){
                    Response::redirectUrl('');
                    Response::info('','');
                    Response::go();
                }else{
                    $this->redirect('Index/G_login');
                }
            }
            $rule  = strtolower(MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME);
            if(!$this->checkRule($rule)){
                Response::info('','');
                Response::go();
            }
        }

        //$this->assign('__controller__', $this);
        /* 读取数据库中的配置*/
        $config	= S('DB_CONFIG_DATA');
        if(!$config){
            $config	= getCache('System/Config');
            S('DB_CONFIG_DATA',$config);
        }
        C($config); //添加配置
    }
    /**
     * action访问控制
     *
     * @return boolean
     *
     *   返回 **false**, 不允许任何人访问(超管除外)
     *   返回 **true**, 允许任何管理员访问,无需执行节点权限检测
     *  返回NULL 继续检测权限
     */
    final protected function accessControl(){

        //管理员允许访问任何页面
        if(IS_ROOT){
            return true;
        }
        //检查特殊前置符
        $preCheck=strpos(ACTION_NAME,'_');
        if($preCheck==1){
            $pre=substr(ACTION_NAME,0,1);
            //包含S 仅超管可用
            if('S'==$pre)
                return false;
            //包含G 为可以guest查看 无需登录，否则调到登录页面
            if('G'==$pre){
                return true;
            }
            //包含P 为公共ACTION 无需权限
            if('P'==$pre && IS_LOGIN){
                return true;
            }else{
                return null;
            }
        }
        return null;
    }
    /**
     * 权限检测
     * @param string  $rule    检测的规则
     * @param string  $mode    check模式
     * @return boolean
     */
    final protected function checkRule($rule){
        if(IS_ROOT){
            return true;//管理员允许访问任何页面
        }
        $rules=getUserAuth('rules');
        if(in_array($rule,$rules) && $rules[$rule]===true)
            return true;
        else
            return false;
    }

    final protected function isSubmit(){
        return isset($_POST['submit']);
    }

}